package ja

import (
	"github.com/Oudwins/zog/zconst"
)

var Map zconst.LangMap = map[zconst.ZogType]map[zconst.ZogIssueCode]string{
	zconst.TypeString: {
		zconst.NotIssueCode(zconst.IssueCodeLen):             "文字列がちょうど {{len}} 文字ではいけません",
		zconst.NotIssueCode(zconst.IssueCodeEmail):           "有効なメールアドレスではいけません",
		zconst.NotIssueCode(zconst.IssueCodeUUID):            "有効なUUIDではいけません",
		zconst.NotIssueCode(zconst.IssueCodeMatch):           "文字列が無効です",
		zconst.NotIssueCode(zconst.IssueCodeURL):             "有効なURLではいけません",
		zconst.NotIssueCode(zconst.IssueCodeHasPrefix):       "文字列は {{prefix}} で始まってはいけません",
		zconst.NotIssueCode(zconst.IssueCodeHasSuffix):       "文字列は {{suffix}} で終わってはいけません",
		zconst.NotIssueCode(zconst.IssueCodeContains):        "文字列に {{contained}} を含んではいけません",
		zconst.NotIssueCode(zconst.IssueCodeContainsDigit):   "文字列に数字を含んではいけません",
		zconst.NotIssueCode(zconst.IssueCodeContainsUpper):   "文字列に大文字を含んではいけません",
		zconst.NotIssueCode(zconst.IssueCodeContainsLower):   "文字列に小文字を含んではいけません",
		zconst.NotIssueCode(zconst.IssueCodeContainsSpecial): "文字列に特殊文字を含んではいけません",
		zconst.NotIssueCode(zconst.IssueCodeOneOf):           "文字列は {{one_of_options}} のいずれでもあってはいけません",
		zconst.IssueCodeRequired:                             "必須です",
		zconst.IssueCodeNotNil:                               "空であってはいけません",
		zconst.IssueCodeMin:                                  "文字列は {{min}} 文字以上である必要があります",
		zconst.IssueCodeMax:                                  "文字列は {{max}} 文字以下である必要があります",
		zconst.IssueCodeLen:                                  "文字列はちょうど {{len}} 文字である必要があります",
		zconst.IssueCodeEmail:                                "有効なメールアドレスである必要があります",
		zconst.IssueCodeUUID:                                 "有効なUUIDである必要があります",
		zconst.IssueCodeMatch:                                "文字列が無効です",
		zconst.IssueCodeURL:                                  "有効なURLである必要があります",
		zconst.IssueCodeIP:                                   "有効な {{ip}} アドレスである必要があります",
		zconst.IssueCodeHasPrefix:                            "文字列は {{prefix}} で始まる必要があります",
		zconst.IssueCodeHasSuffix:                            "文字列は {{suffix}} で終わる必要があります",
		zconst.IssueCodeContains:                             "文字列に {{contained}} を含める必要があります",
		zconst.IssueCodeContainsDigit:                        "文字列には数字を含める必要があります",
		zconst.IssueCodeContainsUpper:                        "文字列には大文字を含める必要があります",
		zconst.IssueCodeContainsLower:                        "文字列には小文字を含める必要があります",
		zconst.IssueCodeContainsSpecial:                      "文字列には特殊文字を含める必要があります",
		zconst.IssueCodeOneOf:                                "文字列は {{one_of_options}} のいずれかである必要があります",
		zconst.IssueCodeFallback:                             "文字列が無効です",
	},
	zconst.TypeBool: {
		zconst.IssueCodeRequired: "必須です",
		zconst.IssueCodeNotNil:   "空であってはいけません",
		zconst.IssueCodeTrue:     "true である必要があります",
		zconst.IssueCodeEQ:       "{{eq}} と等しくなければなりません",
		zconst.IssueCodeFalse:    "false である必要があります",
		zconst.IssueCodeFallback: "値が無効です",
	},
	zconst.TypeNumber: {
		zconst.IssueCodeRequired:                   "必須です",
		zconst.IssueCodeNotNil:                     "空ではいけません",
		zconst.IssueCodeLTE:                        "数値は {{lte}} 以下である必要があります",
		zconst.IssueCodeLT:                         "数値は {{lt}} 未満である必要があります",
		zconst.IssueCodeGTE:                        "数値は {{gte}} 以上である必要があります",
		zconst.IssueCodeGT:                         "数値は {{gt}} より大きい必要があります",
		zconst.IssueCodeEQ:                         "数値は {{eq}} と等しい必要があります",
		zconst.NotIssueCode(zconst.IssueCodeEQ):    "数値は {{eq}} と等しくてはいけません",
		zconst.IssueCodeOneOf:                      "数値は {{one_of_options}} のいずれかである必要があります",
		zconst.NotIssueCode(zconst.IssueCodeOneOf): "数値は {{one_of_options}} のいずれかではいけません",
		zconst.IssueCodeFallback:                   "数値が無効です",
	},
	zconst.TypeTime: {
		zconst.IssueCodeRequired: "必須です",
		zconst.IssueCodeNotNil:   "空ではいけません",
		zconst.IssueCodeAfter:    "{{after}} より後である必要があります",
		zconst.IssueCodeBefore:   "{{before}} より前である必要があります",
		zconst.IssueCodeEQ:       "{{eq}} と等しい必要があります",
		zconst.IssueCodeFallback: "時刻が無効です",
	},
	zconst.TypeSlice: {
		zconst.IssueCodeRequired:                      "必須です",
		zconst.IssueCodeNotNil:                        "空ではいけません",
		zconst.IssueCodeMin:                           "要素数は {{min}} 以上である必要があります",
		zconst.IssueCodeMax:                           "要素数は {{max}} 以下である必要があります",
		zconst.IssueCodeLen:                           "要素数はちょうど {{len}} である必要があります",
		zconst.NotIssueCode(zconst.IssueCodeLen):      "要素数がちょうど {{len}} ではいけません",
		zconst.IssueCodeContains:                      "{{contained}} を含める必要があります",
		zconst.NotIssueCode(zconst.IssueCodeContains): "{{contained}} を含んではいけません",
		zconst.IssueCodeFallback:                      "スライスが無効です",
	},
	zconst.TypeStruct: {
		zconst.IssueCodeRequired: "必須です",
		zconst.IssueCodeNotNil:   "空ではいけません",
		zconst.IssueCodeFallback: "構造体が無効です",
		// JSON
		zconst.IssueCodeInvalidJSON: "無効なJSONボディです",
		// ZHTTP ISSUES
		zconst.IssueCodeZHTTPInvalidForm:  "無効なフォームデータです",
		zconst.IssueCodeZHTTPInvalidQuery: "無効なクエリパラメータです",
	},
}
